<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
            创建对象最好一种方式,那就是构造函数创建对象ES5

            规范:
                建议遵守,但是可以不遵守
                    1. 构造函数为了区分其他的普通的函数,我们需要将函数的名字首字母大写 
            规定:
                必须呀遵守,不遵守报错
                    1. 构造函数是一个函数 所用使用function来进行修饰
                    2. 构造函数当中this是指向的就是实例对象(new 出来的被接收的那个变量)
                    3. 构造函数当中不需要写return关键字
                    4. 构造函数必须搭配new关键字使用

        */
        function Person(name,age,gender){
            /* 
                this 指向就是实例对象
                    this.name 对象身上的属性 name
                    this.age 对象身上的属性 age
                    this.gender 对象身上的属性 gender
                    他们的值 是 通过在创建对象的时候传参传入过来的

                我们的函数当中还有一个return
                    在构造函数当中的return不要写
                        原因是:
                            在构造函数当中return基本数据类型,那么完全没有作用
                            在构造函数当中return复杂数据类型,实例对象失效
            */
            this.name = name;
            this.age = age;
            this.gender = gender;

            this.eat = function(){
                console.log(this.name +"正在吃!");
            }

            // return "nihao "
            // return 1
            // console.log(this);

            // return []
            // return {}
        }
        // const p1 = new Person("张三",18,"男")   //p1 这个对象 => 实例对象
        const p1 = Person("张三",18,"男")   //p1 这个对象 => 实例对象
        console.log(p1);
    </script>
</body>
</html>